home *** CD-ROM | disk | FTP | other *** search
- //////////
- //
- // File: QTStreamMsg.c
- //
- // Contains: Sample code for intercepting and issuing messages to the streaming controller bar.
- //
- // Written by: Tim Monroe
- //
- // Copyright: © 1999 by Apple Computer, Inc., all rights reserved.
- //
- // Change History (most recent first):
- //
- // <1> 06/11/99 rtm first file
- //
- //
- // The movie controller indicates the status of streaming operations by sending action messages to itself.
- // You can intercept those messages in your movie controller action filter procedure by intercepting messages
- // of type mcActionShowStatusString. The parameter data is a pointer to a structure of type QTStatusStringRecord,
- // which is defined like this:
- //
- // struct QTStatusStringRecord {
- // long stringTypeFlags;
- // char * statusString;
- // };
- //
- // You can identify streaming-specific messages by inspecting the stringTypeFlags field; if the bit
- // kStatusStringIsStreamingStatus is set, then the message pertains to streaming operations. In addition, if the bit
- // kStatusHasCodeNumber is set, then the high-order 16 bits of the stringTypeFlags field contain a result code.
- //
- // The statusString field contains the actual text of the status message, which (if you do nothing to it) will be
- // displayed in the controller bar status area. You can (if you like) suppress the display of the message or change
- // the message to some other message.
- //
- //////////
-
- #include "QTStreamMsg.h"
-
- char *gMessageArray[] = MESSAGE_ARRAY; // array of substitute messages
- char gStreamingMessage[kMaxMessageSize];
-
-
- //////////
- //
- // QTStreamMsg_IssueMessage
- // Display the specified message in the controller bar of the streaming movie controlled by theMC.
- //
- //////////
-
- void QTStreamMsg_IssueMessage (MovieController theMC, char *theMessage)
- {
- QTStatusStringRecord myRecord;
-
- myRecord.stringTypeFlags = kStatusStringIsStreamingStatus;
- myRecord.statusString = theMessage;
-
- MCDoAction(theMC, mcActionShowStatusString, &myRecord);
- }
-
-
- //////////
- //
- // QTStreamMsg_ActionFilterProc
- // Intercept some messages for the streaming movie movie controller.
- //
- // For the purposes of this sample code, we will interpret theRefCon as a Boolean value that indicates
- // whether to suppress the display of the messages.
- //
- //////////
-
- PASCAL_RTN Boolean QTStreamMsg_ActionFilterProc (MovieController theMC, short theAction, void *theParams, long theRefCon)
- {
- #pragma unused(theMC)
-
- Boolean isHandled = false; // false => allow controller to process the action
- Boolean isSuppressed = (Boolean)theRefCon;
-
- switch (theAction) {
-
- case mcActionShowStatusString: {
- QTStatusStringPtr myStatusPtr = (QTStatusStringPtr)theParams;
-
- // make sure it's a streaming status message
- if (!(myStatusPtr->stringTypeFlags & kStatusStringIsStreamingStatus))
- break;
-
- // save the original message for our application's own use elsewhere
- if (strlen(myStatusPtr->statusString) > 0)
- strcpy(gStreamingMessage, myStatusPtr->statusString);
-
- // intercept "Connecting", "Negotiating", and "Buffering" and substitute other messages
- if (strcmp(myStatusPtr->statusString, "Connecting") == 0)
- myStatusPtr->statusString = gMessageArray[kConnectingMsgIndex];
-
- if (strcmp(myStatusPtr->statusString, "Negotiating") == 0)
- myStatusPtr->statusString = gMessageArray[kNegotiatingMsgIndex];
-
- if (strcmp(myStatusPtr->statusString, "Buffering") == 0)
- myStatusPtr->statusString = gMessageArray[kBufferingMsgIndex];
-
- if (isSuppressed)
- isHandled = true;
-
- break;
- }
-
- // handle other mcAction messages here
-
- default:
- break;
-
- } // switch (theAction)
-
- return(isHandled);
- }
-
-
-
-